package com.hb.trade.server.center.au.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.hb.core.pojo.center.au.dto.AgencyUserBidDTO;
import com.hb.core.pojo.center.au.dto.RoleDTO;
import com.hb.core.pojo.center.au.dto.UserDTO;
import com.hb.core.pojo.center.au.entity.User;
import com.hb.core.pojo.parent.PageResult;

import java.io.Serializable;
import java.util.List;

/**
 * <p>
 * 系统用户表，表中用户包括两种类型，系统管理用户和招标业务用户 服务类
 * </p>
 *
 * @author zhaojk
 * @since 2021-11-29
 */
public interface UserService extends IService<User> {

    /**
     * 查询指定用户是否在黑名单
     *
     * @param usernameOrUserId 用户名或者用户ID
     * @return
     */
    boolean existsInBlackList(Serializable usernameOrUserId);

    /**
     * 查询指定企业下的所有用户
     *
     * @param orgId
     * @return
     */
    List<User> listByOrgId(Long orgId);

    /**
     * 仅通过用户名和手机号判断用户是否存在
     *
     * @param user
     * @return
     */
    User exists(User user);

    /**
     * 查询指定角色下的用户成员列表
     *
     * @param roleDTO#id       角色ID
     * @param roleDTO#pageFlag 返回形式(1: 分页对象, 2: 列表对象)
     * @return
     */
    Object usersByRoleId(RoleDTO roleDTO);

    /**
     * 获取指定角色ID的用户成员列表
     *
     * @param roleId
     * @return 数组集合
     */
    List<User> listUsersByRoleId(Long roleId, Long orgId);

    /**
     * 获取指定角色ID的用户成员列表
     *
     * @param roleId
     * @return 分页对象
     */
    PageResult<User> pageUsersByRoleId(Page<User> pages, Long roleId, Long orgId);

    /**
     * 核对中招扫码信息是否与当前登录人一致
     *
     * @param zaphoneNum 中招扫码信息·手机号
     * @param offerId    投标人id
     * @author: fengbin
     * @date: 2022/2/23 13:51
     * @return: java.lang.Boolean
     */
    Boolean zappUserConfirmInfo(String zaphoneNum, Long offerId);

    /**
     * 新增一个系统用户
     *
     * @param userDTO
     * @return
     */
    boolean addSystemUser(UserDTO userDTO);

    /**
     * @param agencyUserDTO:
     * @Description: 分页查询用户列表
     * @Author: zhongdl
     * @Date:2022/3/23 13:37
     * @return: {@link PageResult< UserDTO> }
     **/
    PageResult<UserDTO> pageAuditUser(AgencyUserBidDTO agencyUserDTO);

    /**
     * @param id:
     * @param userStatus:
     * @Description:审核用户的状态
     * @Author: zhongdl
     * @Date:2022/3/23 15:02
     * @return: {@link boolean }
     **/
    boolean examine(Long id, Integer userStatus, String reason);

    /**
     * 根据身份证和角色id查询用户
     *
     * @param roleId
     * @param idNum
     * @return
     * @Author: ljs
     * @Date:2022-3-24 10:02:22
     */
    User getUserByRoleAndIdNum(Long roleId, String idNum);

    /**
     * 根据手机号和角色id查询用户
     *
     * @param roleIds
     * @param phone
     * @return
     * @Author: ljs
     * @Date:2022-3-24 10:02:22
     */
    List<User> getUserByPhoneAndRoleSign(List<Long> roleIds, String phone, Long orgId);

    User getUserByOrgIdAndRoleId(Long roleId, Long orgId);

//    User getUserByUnifiedTransactionCodeAndRoleSign(String unifiedTransactionCode,Long roleId);
    User getUserByUnifiedTransactionCodeAndRoleIds(String unifiedTransactionCode,List<Long> roleIds);
    /**
     * 根据机构交易猫和roleSign查询用户
     * @param unifiedTransactionCode
     * @param roleSign
     * @return
     */
    User getUserByUnifiedTransactionCodeAndRoleSign(String unifiedTransactionCode,Integer roleSign);


    /**
     * @param orgId:企业id
     * @param userId:用户id(userId 不为空则除了当前userId 为空则查询企业的)
     * @param userStatus:用户状态
     * @Description:查询当前企业审核状态的数量
     * @Author: zhongdl
     * @Date:2022/4/13 14:11
     * @return: {@link int }
     **/
    int approvedCount(Long orgId, Long userId, Integer userStatus);

    /**
     * 分页获取指定查询条件的用户列表
     *
     * @param pages
     * @param userDto
     */
    Page<User> pageUsers(Page<User> pages, UserDTO userDto);

    /**
     * 根据企业id集合查询用户
     *
     * @author yuezheng
     * @param orgIdList
     * @return org.fzzn.core.model.msg.Message
     * @date 2022/4/23 10:12 AM
     */
    List<User> findUserByOrgList(List<String> orgIdList);


    /**
     * 根据id查询投标人
     *
     * @param userList
     * @return org.fzzn.core.model.msg.Message
     * @author yuezheng
     * @date 2022/4/23 10:12 AM
     */
    List<User> finBidUserByUserList(List<User> userList);

    /**
     * 获取公司下的企业管理员账号
     * @param userDTO
     * @return
     */
    User findManagerByOrgId(UserDTO userDTO);
}
